iT邦幫忙

2024 iThome 鐵人賽

DAY 28
1
Python

Python入門基礎語法與應用系列 第 28

Day 28 Python入門基礎語法與應用-遞迴應用(2)

  • 分享至 

  • xImage
  •  

遞迴的第二個練習題是計算最大公因數!
不過除了講遞迴的寫法,還會多寫另外兩種寫法
今天會用到歐幾里得算法,先給大家補充一下!

歐幾里得算法(Euclidean Algorithm)是一種古老而高效的算法,用於計算兩個整數的最大公因數(Greatest Common Divisor,GCD)

歐幾里得算法定理: 兩個數字 a 和 b 的最大公因數等於b和a除以b的餘數的最大公因數
也就是說,gcd(a,b)=gcd(b,a%b)
接下來直接看題目吧~

計算最大公因數

1.遞迴方法
https://ithelp.ithome.com.tw/upload/images/20240828/201682111Urtz9ixyi.png
定義一個叫做gcd的函式,它的參數a和b是使用者輸入了兩個數字,利用函式中程式碼去找這兩個數的最大公因數
if b==0這部分就是基本情況,表示遞迴的結束條件!也因為b是0,所以最大公因數就會是a
else的部分就是遞迴情況,也就是當b不等於0這個條件符合的時候執行
return gcd(b, a%b)它呼叫了自己!呼叫gcd去計算gcd(b,a%b)
意思是用 b 和 a除以b 的餘數來替代原來的a和b
這個是根據歐幾里得算法進行的!

再來下面就是輸入部分
最後一行就是輸出gcd(a,b)
看執行結果,我輸入28和20,去跑gcd函式,找到最大公因數是4!

2.內建函式方法
https://ithelp.ithome.com.tw/upload/images/20240828/2016821114D5PumnTy.png
這個方法是要引入模組! import math
這個程式碼更短了~
我隨便輸入50和18,找出最大公因數是2

3.迭代方法
https://ithelp.ithome.com.tw/upload/images/20240828/20168211AkIiMW1dJg.png
其實程式碼也減少很多~前面一樣先定義gcd函式
迴圈的條件是當b!=0的時候,迴圈才會繼續執行
迴圈裡面執行的程式碼來解釋一下><
a, b = b, a % b這句同時更新了變數的值
a會更新成b的值,而b會更新成a%b的值
這一步的目的是按照歐幾里得算法的定義來更新a和b,將問題轉化為較小的子問題
每次迴圈執行,a和b的值都會變得更小,直到b=0
當b=0的時候,就return a,a就是最大公因數!

後面我輸入32和24
說明一下計算步驟~這樣比較能看懂!

第一次迴圈:
a = 32
b = 24
計算 32 % 24 = 8
更新為 a = 24,b = 8

第二次迴圈:
a = 24
b = 8
計算 24 % 8 = 0
更新為 a = 8,b = 0

結束:
現在b=0,結束迴圈
回傳a的值,也就是8

整理了三種方法的好處或壞處!

1.遞迴方法:它是一種直觀而且也簡單的實現方式,但可能會有額外的遞迴調用開銷
2.內建函數方法:是最簡單、推薦的方法,因為它利用了Python標準函式庫中的高效實現!
3.迭代方法:是一種避免遞迴開銷的實現方式,適合需要高效性能的場合

明天還有最後一題!
我覺得難度比較高一些,跟字串還有排列有關!


上一篇
Day 27 Python入門基礎語法與應用-遞迴應用(1)
下一篇
Day 29 Python入門基礎語法與應用-遞迴應用(3)
系列文
Python入門基礎語法與應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言